<?php

namespace app\common\library\wechat\applet;

use app\common\exception\BaseException;
use app\common\library\wechat\WxBase;
use app\common\model\Wxapp as WxappModel;

/**
 * 小程序二维码
 * Class Qrcode
 * @package app\common\library\wechat
 */
class UrlLink extends WxBase
{
    public static function instance($wxappId): UrlLink
    {
        // 小程序配置信息
        $wxConfig = WxappModel::getWxappCache($wxappId);
        return new static($wxConfig['app_id'], $wxConfig['app_secret']);
    }
    
    /**
     * 获取小程序链接
     * @param null $path
     * @param string $query
     * @return mixed
     * @throws BaseException
     */
    public function generate($path = null, string $query = '')
    {
        // 微信接口url
        $access_token = $this->getAccessToken();
        $url = "https://api.weixin.qq.com/wxa/generate_urllink?access_token={$access_token}";
        // 构建请求
        // {
        //     "path": "非必填, 请输入字符串, 例如'a'",
        //     "query": "非必填, 请输入字符串, 例如'a'",
        //     "is_expire": "非必填, 请输入true 或者false",
        //     "expire_type": "非必填, 请输入整型, 例如1",
        //     "expire_time": "非必填, 请输入整型, 例如1",
        //     "expire_interval": "非必填, 请输入整型, 例如1",
        //     "cloud_base": {
        //         "env": "必填, 请输入字符串, 例如'a'",
        //         "domain": "非必填, 请输入字符串, 例如'a'",
        //         "path": "非必填, 请输入字符串, 例如'a'",
        //         "query": "非必填, 请输入字符串, 例如'a'",
        //         "resource_appid": "非必填, 请输入字符串, 例如'a'"
        //     },
        //     "env_version": "非必填, 请输入字符串, 例如'a'"
        // }
        // scene=uid:4157
        // $data = compact('scene');
        $data = [];
        $data['is_expire'] = false;
        $path && $data['path'] = $path; //pages/index/index
        $query && $data['query'] = $query;
        
        $result = $this->post($url, json_encode($data, JSON_UNESCAPED_UNICODE));
        // 记录日志
        log_write([
            'describe' => '获取小程序链接 ',
            'params' => $data,
            'result' => $result
        ]);
        $result = json_decode($result, true);
        if ($result['errcode'] != 0) {
            throw new BaseException(['msg' => $result['errmsg']]);
        }
        return $result;
    }

}